﻿Public Class TMyProfileList
    Implements System.IDisposable

    Private MyQuery As New TMyQuery
    Private _List As New List(Of TMyProfile)
    Private _Enabled As Boolean

    Public Sub New(ByVal AConnection As TMySession)
        MyQuery.Session = AConnection
        Me.Enabled = False
    End Sub

    Public Property Enabled() As Boolean
        Get
            Return _Enabled
        End Get
        Set(ByVal value As Boolean)
            SetEnabled(value)
        End Set
    End Property

    Private Sub SetEnabled(ByVal AValue As Boolean)
        MyQuery.Clear()
        If AValue Then
            MyQuery.SQL.AppendLine("set profiling=1")
            _Enabled = True
        Else
            MyQuery.SQL.AppendLine("set profiling=0")
            _Enabled = False
        End If
        MyQuery.Execute()
    End Sub

    Public ReadOnly Property Count() As Integer
        Get
            Return _List.Count
        End Get
    End Property
    Public Sub Refresh()
        _List.Clear()
        MyQuery.Close()
        MyQuery.Clear()
        MyQuery.SQL.AppendLine("show profiles")
        MyQuery.Execute()
        While Not MyQuery.Eof
            Dim item As New TMyProfile
            item._ID = MyQuery.FieldAsInteger("Query_ID")
            item._Duration = MyQuery.FieldAsDecimal("Duration")
            item._SQL = MyQuery.FieldAsString("Query")
            _List.Add(item)
            MyQuery.MoveNext()
        End While
        MyQuery.Close()
    End Sub
    Default Public ReadOnly Property Items(ByVal Index As Integer) As TMyProfile
        Get
            Return _List(Index)
        End Get
    End Property
    Public Function GetDetail(ByVal AIndex As Integer) As DataTable
        MyQuery.Close()
        MyQuery.Clear()
        MyQuery.SQL.AppendLine("show profile all for query " & _List(AIndex).ID.ToString)
        MyQuery.Execute()
        Return MyQuery.DataSet.Tables(0)
    End Function

    Private disposedValue As Boolean = False        ' 重複する呼び出しを検出するには

    ' IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ' TODO: 他の状態を解放します (マネージ オブジェクト)。
            End If

            ' TODO: ユーザー独自の状態を解放します (アンマネージ オブジェクト)。
            ' TODO: 大きなフィールドを null に設定します。
        End If
        Me.disposedValue = True
    End Sub

#Region " IDisposable Support "
    ' このコードは、破棄可能なパターンを正しく実装できるように Visual Basic によって追加されました。
    Public Sub Dispose() Implements IDisposable.Dispose
        ' このコードを変更しないでください。クリーンアップ コードを上の Dispose(ByVal disposing As Boolean) に記述します。
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region

End Class
